/* 
 * File:   UsersDB.h
 * Author: nahuel
 *
 * Created on June 4, 2013, 8:34 PM
 */

#ifndef USERSDB_H
#define	USERSDB_H

#include <string>
#include <vector>
#include "common_tinyxml.h"

using namespace std;

namespace TP {

class UsersDB {
    private:
        static const std::string _rootNodeName;
        static const std::string _userNodeName;
        static const std::string _usernameAttrName;
        static const std::string _hashedPswAttrName;
        
        std::string _filePath;
        TiXmlDocument* _dbFile;
        
        /*
         *  Crea el archivo de la base de datos de usuarios. 
         *  Se utiliza cuando no se encuentra el archivo solicitado.
         */
        void _CrearArchivo();
        
    public:
        /*
         * Inicializa la base de datos de usuarios representada por filePath.
         * Si no existe, se inicializa una nueva vacia.
         */
        UsersDB(const std::string& filePath);
        
        /*
         * Agrega un nuevo usuario a la base de datos guardando el hash
         * de su contraseña.
         */
        void AgregarUsuario(const std::string& usuario, const std::string& password);
        
        /*
         * Devuelve true si el usuario y contraseña corresponden a un usuario de la
         * base de datos.
         */
        bool AutenticarUsuario(const std::string& usuario, const std::string& password);
        
        /*
         * Elimina un usuario de la base de datos.
         * Devuelve true en caso exitoso.
         */
        bool DeleteUsuario(const std::string& usuario, const std::string& password);
        
        virtual ~UsersDB();
        
        vector<string> GetUsuarios();
};

}

#endif	/* USERSDB_H */

